home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / lib / rcscripts / net.modules.d / pump < prev    next >
Text File  |  2006-04-25  |  3KB  |  133 lines

  1. # Copyright (c) 2004-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Header$
  4.  
  5. # Contributed by Roy Marples (uberlord@gentoo.org)
  6.  
  7. # Fix any potential localisation problems
  8. # Note that LC_ALL trumps LC_anything_else according to locale(7)
  9. pump() {
  10.     LC_ALL=C /sbin/pump "$@"
  11. }
  12.  
  13. # char* pump_provides(void)
  14. #
  15. # Returns a string to change module definition for starting up
  16. pump_provides() {
  17.     echo "dhcp"
  18. }
  19.  
  20. # void pump_depend(void)
  21. #
  22. # Sets up the dependancies for the module
  23. pump_depend() {
  24.     after interface
  25. }
  26.  
  27. # bool pump_check_installed(void)
  28. #
  29. # Returns 1 if pump is installed, otherwise 0
  30. pump_check_installed() {
  31.     [[ -x /sbin/pump ]] && return 0
  32.     ${1:-false} && eerror "For DHCP (pump) support, emerge net-misc/pump"
  33.     return 1
  34. }
  35.  
  36. # bool pump_check_depends(void)
  37. #
  38. # Checks to see if we have the needed functions
  39. pump_check_depends() {
  40.     local f
  41.  
  42.     for f in interface_variable interface_device interface_is_up interface_get_address; do
  43.         [[ $( type -t ${f} ) == function ]] && continue
  44.         eerror "pump: missing required function ${f}\n"
  45.         return 1
  46.     done
  47.  
  48.     return 0
  49. }
  50.  
  51. # char* pump_get_vars(char *interface)
  52. #
  53. # Returns a string spaced with possible user set
  54. # configuration variables
  55. pump_get_vars() {
  56.     echo "pump_${1} dhcp_${1}"
  57. }
  58.  
  59. # bool pump_stop(char *iface)
  60. #
  61. # Stop pump on an interface by calling pumpcd -z $iface
  62. #
  63. # Always returns 0
  64. pump_stop() {
  65.     local iface=${1} count e
  66.     
  67.     pump_check_installed || return 0
  68.  
  69.     # We check for a pump process first as querying for status
  70.     # causes pump to spawn a process
  71.     ps -C pump &>/dev/null || return 0
  72.  
  73.     e=$( pump --status --interface ${iface} 2>${devnull} | grep ${iface})
  74.     [[ -z ${e} ]] && return 1
  75.     
  76.     ebegin "Stopping pump on ${iface}"
  77.     for ((count = 0; count < 9; count = count + 1)); do
  78.         e=$( pump --release --interface ${iface} 2>${devnull} )
  79.         [[ -z ${e} ]] && break
  80.         sleep 1
  81.     done
  82.     [[ ${count} -lt 9 ]]
  83.     eend $? "Timed out"
  84.  
  85.     return 0  # we did *attempt* to stop pump
  86. }
  87.  
  88. # bool pump_start(char *iface)
  89. #
  90. # Start pump on an interface by calling pumpcd $iface $options
  91. #
  92. # Returns 0 (true) when a dhcp address is obtained, otherwise
  93. # the return value from pump
  94. pump_start() {
  95.     local iface=${1} opts hostname dhcp
  96.     local ifvar=$( interface_variable ${iface} )
  97.  
  98.     interface_exists ${iface} true || return 1
  99.  
  100.     eval opts=\"\$\{pump_${ifvar}\}\"
  101.  
  102.     # Map some generic options to pump
  103.     eval dhcp=\" \$\{dhcp_${ifvar}\} \"
  104.     [[ ${dhcp} == *' nodns '* ]] && opts="${opts} --no-dns"
  105.     [[ ${dhcp} == *' nogateway '* ]] && opts="${opts} --no-gateway"
  106.  
  107.     # We transmit the hostname by default
  108.     if [[ ${dhcp} != *' nosendhost '* && ${opts} != *'-h '* && ${opts} != '*--hostname='* ]]; then
  109.         hostname=$( hostname )
  110.         [[ -n ${hostname} && ${hostname} != "(none)" && ${hostname} != localhost ]] \
  111.             && opts="--hostname=${hostname} ${opts}"
  112.     fi
  113.  
  114.     # Bring up DHCP for this interface (or alias)
  115.     ebegin "Running pump"
  116.     pump ${opts} --win-client-ident --interface ${iface} 2>${devnull}
  117.     eend $? || return $?
  118.  
  119.     # pump succeeded, show address retrieved
  120.     local addr=$( interface_get_address ${iface} )
  121.     einfo "${iface} received address ${addr}"
  122.  
  123.     eval peer=\"\$\{dhcp_ntp_${iface}\}\"
  124.     [[ -z ${peer} ]] && eval peer=\"\$\{dhcp_ntp\}\"
  125.     if [[ ${peer} != no ]]; then
  126.         export ntpsrv=$( pump -i ${iface} --status 2>/dev/null | awk '/Ntpservers/ {print $2}' 2>/dev/null )
  127.         source ${MODULES_DIR}/helpers.d/config-system
  128.         config_system
  129.     fi
  130.  
  131.     return 0
  132. }
  133.